/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cadastropessoas.dao;


import CadastroPessoas.model.Email;
import CadastroPessoas.model.Pessoa;
import CadastroPessoas.model.Telefone;
import CadastroPessoas.util.HibernateUtil;
import cadastropessoas.dao.InterfaceCadastroPessoaDAO;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author 201044761
 */
public class CadastroPessoasDAO implements InterfaceCadastroPessoaDAO {

    private final Session session;

    public  CadastroPessoasDAO() {////contrutor
        this.session = HibernateUtil.getSessionFactory().///pegar uma sesão
                getCurrentSession();
    }


    public void gravarPessoa(Pessoa pessoa, Set<Email> listaEmails, Set<Telefone> listaTelefones) {
        Transaction trans = session.beginTransaction();
        try {
            session.save(pessoa);
            for (Email email : listaEmails) {
                email.setPessoa(pessoa);
                session.save(email);
            }
            for (Telefone telefone : listaTelefones) {
                telefone.setPessoa(pessoa);
                session.save(telefone);
            }
            trans.commit();
        } catch (Exception erro) {
            trans.rollback();
        }


    }


    public void alterarPessoa(Pessoa pessoa) {
        Transaction trans = session.beginTransaction();
        session.update(pessoa);///grava no banco de
        trans.commit();
    }


    public void deletarPessoa(Pessoa pessoa) {
        Transaction trans = session.beginTransaction();
        session.delete(pessoa);
        trans.commit();
    }

    public List<Pessoa> listarPessoa() {
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
        List listaPessoa = s.createQuery("FROM Pessoa").list();
        s.close();
        System.out.println(listaPessoa.toArray());

        return listaPessoa;

    }
    @SuppressWarnings("empty-statement")
    public Pessoa getPessoa(String cpf) {
        Transaction trans = session.beginTransaction();
        Pessoa pessoa = null;
        try {
            pessoa = new Pessoa();
            List<Pessoa> ListaPessoas = session.createQuery("FROM Pessoa Where cpf='" + cpf + "'").list();

            for (Iterator iterator1 = ListaPessoas.iterator(); iterator1.hasNext();) {
                pessoa = (Pessoa) iterator1.next();
                Set Telefones = pessoa.getTelefones();
                Set Emails = pessoa.getEmails();

             for (Iterator iterator0 = Emails.iterator(); iterator0.hasNext();) {
                   Email email = (Email) iterator0.next();
             }
               for (Iterator iterator2 = Telefones.iterator(); iterator2.hasNext();) {
                   Telefone telefone = (Telefone) iterator2.next();
                    //System.out.println("Telefone:" + telefone.getNumTelefone());
                }

            }
            trans.commit();
        } catch (Exception e) {
            if (trans != null) {
                trans.rollback();
            }
            e.printStackTrace();
        }
        return pessoa;

    }

    public void gravarCadastroPessoas(Pessoa pessoas, Set<Email> listaEmail, Set<Telefone> listaTelefone) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void alterarCadastroPessoas(Pessoa pessoas) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void deletarCadastroPessoas(Pessoa pessoas) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Pessoa> listarCadastroPessoas() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
